﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Threading;

namespace WinBird
{
    public partial class MainForm : Form
    {
        private void Login()
        {
            this.webBrowser_Auth.Navigate(api.urlLogin);
            this.Text = "Авторизация - "+AppTitle;
        }

        private void webBrowser_Auth_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            this.webBrowser_Auth.Visible = true;

            string getAccessToken = this.webBrowser_Auth.Url.Fragment.ToString();

            Regex re = new Regex(@"(access_token|error|code|user_id)=([^&]+)");
            MatchCollection mc = re.Matches(getAccessToken);

            if (this.webBrowser_Auth.Document.Body.InnerText == "security breach")
            {
                this.webBrowser_Auth.Visible = false;
                var result = err.setQuestion("Вы отказались от авторизации, повторить ввод?", "Ошибка авторизации");

                if (result == DialogResult.Yes)
                {
                    this.webBrowser_Auth.Navigate(api.urlLogin);
                }
                else
                {
                    this.Close();
                }
            }

            foreach (Match m in mc)
            {
                if (m.Success)
                {
                    GroupCollection gc = m.Groups;
                    string type = gc[1].Value;
                    string param = gc[2].Value;

                    switch (type)
                    {
                        case "error":
                            this.webBrowser_Auth.Visible = false;
                            var result = err.setQuestion("Попытка авторизации привела к ошибке, повторить попытку?", "Ошибка авторизации");

                            if (result == DialogResult.Yes)
                            {
                                this.webBrowser_Auth.Navigate(api.urlLogin);
                            }
                            else
                            {
                                this.Close();
                            }
                            break;

                        case "code":
                            this.webBrowser_Auth.Visible = false;
                            this.webBrowser_Auth.Navigate(api.urlLogin);
                            break;

                        case "access_token":
                            api.AccessToken = param;
                            break;

                        case "user_id":
                            api.UserID = int.Parse(param);
                            api.homeUserID = int.Parse(param);
                            break;
                    }
                }
            }


            if (api.AccessToken.Length > 0 && api.UserID > 0)
            {
                this.webBrowser_Auth.Visible = false;
                this.panelAuth.Visible = false;

                Thread thInit = new Thread(ThreadInit);
                thInit.Priority = ThreadPriority.Lowest;
                thInit.Start();
            }
        }

        private void ThreadInit()
        {
            try
            {
                this.listFriends.Invoke(new delegateInit(this.Init));
            }
            catch
            {
            }
        }
        public delegate void delegateInit();

        private void Logout()
        {
            this.Text = "Авторизация - " + AppTitle;
            this.panelAuth.Visible = true;
            this.panelMain.Visible = false;
            api.AccessToken = "";
            api.UserID = -1;
            this.webBrowser_Auth.Navigate(api.urlLogout);
        }
    }
}
